<?php

/**************************************************************************
* Source File	:  FormationMySQL.php
* Author        :  Amodeos - Herleman - Kuete
* Project name  :  Gestion Annuaire des anciens de l'UM2
* Modified   	:  18/05/2010
* Description	:  Definition de la classe  FormationMySQL qui herite de la classe Formation
**************************************************************************/

//includes
include 'Formation.php';
require_once 'Connection.php';


class FormationMySQL  extends Formation			
{
	//Attributes
	private $idFormation;	//L'identifiant de l'objet
	private static $listeFormations = array();	//La liste des formations
	
	
	//Constructeur
//	public function FormationMySQL ($idForm, $duree) {
//		parent::Formation($duree);
//		$this -> $idFormation = $idForm;
//	}
	
	//Accesseurs et Modificateurs
	public function getIdFormation () {
		return $this -> idFormation;
	}
	
	
	public function setIdFormation ($idForm) {
		$this -> idFormation = $idForm;
	}
	 
	
	
	//Methodes importees de InterfaceSLD
	public function save () {
		$listForm = FormationMySQL::getListeFormations();
		$bdd = Connection::getInstance();
		$duree = $this->getDureeFormation();
		$nom = $this->getNom();
		$description = $this->getDescription();
		
		if (empty($this->idFormation)) {	//Il s'agit d'une creation d'une nouvelle formation
			try {
				//Enregistrement dans la BDD	
				$count = $bdd->query("INSERT INTO FORMATION VALUES (NULL, NULL, $duree,$nom, $description)");
				//Recuperation de l'identifiant generee
				$id = $bdd->lastInsertId();
				$this->idFormation = $id;
					
				//Enregistrement dans la liste des formations
					//Ajout de la nouvelle formation dans la liste des formations
				$listForm[] = $this;
			}
			catch (PDOException $erreur) {
				echo 'Erreur : '. $erreur->getMessage();
			}	
		}
		
		else {	//Il s'agit d'une mise a jour d'une formation
			try {
				//UPDATE en BDD
				$count = $bdd->query("UPDATE FORMATION SET DUREE_FORMATION=$duree,NOM=$nom, DESCRIPTION = $description WHERE IDFORMATION=$this->idFormation");
				//UPDATE dans la liste des formations
				$indice = array_search($this, $listForm);
				if (!($indice === false)) {	//Cette formation existe dans la liste des formations
					//Mise a jour de la formation
					$listForm[$indice]->setDureeFormation($duree);
				}
			}
			catch (PDOException $erreur) {
				echo 'Erreur : '. $erreur->getMessage();
			}
			
		}
	}
	
	
	public function load () {
		$bdd = Connection::getInstance();

		$reponse = $bdd->query("SELECT * FROM FORMATION WHERE IDFORMATION=$this->idFormation");
		$donnees = $reponse->fetch();
		$this->setDureeFormation($donnees['DUREE_FORMATION']);
		$this->setNom($donnees['NOM']);
		$this->setDescription($donnees['DESCRIPTION']);
		
		$reponse->closeCursor();
	}
	
	public function delete () {
		$bdd = Connection::getInstance();
		$idFormation = $this->getIdFormation();
		$requete = "DELETE FROM PROMO WHERE IDFORMATION=$idFormation";
		$requete2 = "DELETE FROM FORMATION WHERE IDFORMATION=$idFormation";
		$bdd->query($requete);
		$bdd->query($requete2);
		
	}
	
	
	
	/**
	 * Fonction statique permettant de recuperer la liste des formations dans 
	 * la base de donnees, et de retourner cette liste sous forme de tableau
	 */
	public static function getListeFormations () {
			$listeForm = array();
			$bdd = Connection::getInstance();
			
			$reponse = $bdd->query("SELECT * FROM FORMATION");
			$donnees = $reponse->fetch();
			
			while ($donnees) {
				//Creation de l'objet FormationMySQL
				$formation = new FormationMySQL();
				$formation->idFormation = $donnees['IDFORMATION'];
				$formation->setDureeFormation($donnees['DUREE_FORMATION']);
				$formation->setNom($donnees['NOM']);
				$formation->setDescription($donnees['DESCRIPTION']);
				//Ajout de l'objet dans la liste des composantes
				$listeForm[] = $formation;
				//Element suivant
				$donnees = $reponse->fetch();
			}
			self::$listeFormations = $listeForm;
			$reponse->closeCursor();
		
		//On a recuperer toutes les formations de la BDD
		
		return self::$listeFormations;
	}
	
	
	/**
	 * Fonction statique permettant de recuperer la liste des formations par composante dans 
	 * la base de donnees, et de retourner cette liste sous forme de tableau
	 * @param  $idComposante L'identifiant de la composante dans laquelle se trouve ses formations
	 */
	public static function getListeFormationsByComposante ($idComposante) {
		//Recuperation de la liste des formations completes
		$listeComplete = self::getListeFormations();
		//Recuperation de la liste des formations de la composante en BD
		$bdd = Connection::getInstance();
		$listFormByComp = array();
		$reponse = $bdd->query("SELECT * FROM FORMATION WHERE IDCOMPOSANTE=$idComposante");
		$donnees = $reponse->fetch();
		
		//Recherche des objets correspondants dans la liste complete des formations
		while ($donnees) {
			$idForm = $donnees['IDFORMATION'];
			//Recherche dans la liste des formations
			$i = 0;
			$stop = false;	//Valeur d'arret
			while ( ($i < sizeof($listeComplete)) && (!($stop)) ) {
				if ($listeComplete[$i]->getIdFormation() == $idForm) {
					$stop = true;
				}
				else {
					$i++;
				}
			}	//$i contient l'indice de la formation recherchee
			//Ajout de la formation dans la liste des formations par composante
			$listFormByComp[] = $listeComplete[$i];
			//Element suivant
			$donnees = $reponse->fetch();
		}
		
		//Nous pouvons maintenant retourner la liste demandee
		return $listFormByComp;
		$reponse->closeCursor();
	}
	
	
	
	//Methodes
	public function modifierInfosFormation ($duree){
		//Mise a jour des informations 
		$this -> dureeFormation = $duree;
	}
	 	
	 
	

} // End Class FormationMySQL

//Test des fonctions
//$listeForm = FormationMySQL::getListeFormations();
//echo 'Taille = '. sizeof($listeForm) .'<br>';
//print_r($listeForm); echo'<br><br><br>';
//
//$form = new FormationMySQL();
//$form->setDureeFormation(7);
//$form->save();
//print_r($form)


?>



